﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//HJ31 单词倒排
//
//说明：
//
//1、构成单词的字符只有26个大写或小写英文字母；
//
//2、非构成单词的字符均视为单词间隔符；
//
//3、要求倒排后的单词间隔符以一个空格表示；如果原字符串中相邻单词间有多个间隔符时，倒排转换后也只允许出现一个空格间隔符；
//
//4、每个单词最长20个字母；
//
//数据范围：字符串长度满足
//1
//≤
//�
//≤
//10000
//
//1≤n≤10000
//输入描述：
//输入一行，表示用来倒排的句子
//
//输出描述：
//输出句子的倒排结果
void reserve(char* arr, int left, int right)
{
    while (left < right)
    {
        char tem = arr[left];
        arr[left] = arr[right];
        arr[right] = tem;
        left++;
        right--;
    }
}
int main() {
    char arr[1000000] = { '\0' };
    gets(arr);
    int len = strlen(arr);
    int left = 0;
    int right = 0;
    reserve(arr, 0, len - 1);
    for (int i = 0; i < len; i++)
    {
        if (!(arr[i] >= 'A' && arr[i] <= 'z'))
        {
            arr[i] = ' ';
        }
    }
    while (left < len)
    {
        while (left < len && arr[left] == ' ')
        {
            left++;
        }
        right = left;
        while (right < len && arr[right] != ' ')
        {
            right++;
        }
        reserve(arr, left, right - 1);
        left = right;
    }
    printf("%s", arr);
    return 0;
}